const mutations = { // 同步更新状态数据的方法
  // 向购物车中添加商品
  // state：状态
  // payload：有效载荷，即向购物车数组中添加的商品数据
  add(state, payload) {
    // 判断当前选购商品在购物车中是否已存在
    // 如果已存在，则叠加数量，不存在，添加到数组中
    const has = state.cart.some(prod => prod.id === payload.id)
    if (has) {
      state.cart = state.cart.map(prod => {
        const copy = { ...prod }
        if (copy.id === payload.id) {
          copy.amount += payload.amount
        }
        return copy
      })
    } else {
      const prod = {
        ...payload,
        checked: true, // 选中状态
      }
      state.cart.push(prod)
    }
  },
  // 删除购物车商品
  remove(state, payload) {
    state.cart = state.cart.filter(prod => prod.id !== payload)
  },
  // 修改商品数量
  // payload 中传递修改商品的编号id与修改后的数量amount
  modifyAmount(state, payload) {
    state.cart = state.cart.map(prod => {
      const copy = { ...prod }
      if (copy.id === payload.id) {
        copy.amount = payload.amount
      }
      return copy
    })
  },
  // 修改选中状态
  // payload 中传递商品的 id
  toggleChecked(state, payload) {
    state.cart = state.cart.map(prod => {
      const copy = { ...prod }
      if (copy.id === payload) {
        copy.checked = !copy.checked
      }
      return copy
    })
  },
  // 全选/取消全选
  // payload 表示是否已全选
  toggleCheckAll(state, payload) {
    state.cart = state.cart.map(prod => {
      const copy = { ...prod }
      copy.checked = !payload
      return copy
    })
  },
}

export default mutations
